在使用外部API時,常常都需要地理位置,那就來詢問使用者地理位置吧。
1.設計詢問要地理位置的意圖(Intent),可多新增action再詢問關鍵參數,例如我想要去玩?、今天天氣如何?
2.增加一個user_info意圖(Intent),在事件(Events)增加 Google Assistant Permission
3.兩個Intent的Fulfillment都要開啟
處理意圖和詢問地理位置後,使用者回覆同意後,就可以呼叫API,回覆API的資訊。
1.詢問地理位置的意圖命稱
//intent process
app.intent('詢問地理位置的意圖命稱', (conv) => {
conv.data.requestedPermission = 'DEVICE_PRECISE_LOCATION';
//詢問使用者地理位置
return conv.ask(new Permission({
context: '您好',
permissions: conv.data.requestedPermission
})
);
});
2.使用者同意或不同意地理位置意圖處理及呼叫API
//Location Intent
app.intent('user_info', (conv, params, permissionGranted) => {
if (permissionGranted) {
const {
requestedPermission
} = conv.data;
if (requestedPermission === 'DEVICE_PRECISE_LOCATION') {
const {
coordinates
} = conv.device.location;
if (coordinates) {
return Call_API(API參數).then((API回應) => {
conv.ask(API回應);
})
} else {
// Note: Currently, precise locaton only returns lat/lng coordinates on phones and lat/lng coordinates
// and a geocoded address on voice-activated speakers.
// Coarse location only works on voice-activated speakers.
return conv.close('抱歉,我不知道你在哪裡。');
}
}
} else {
return conv.close('好的,那你還想問什麼問題嗎?');
}
});
3.呼叫外部API
//external API start
/**
* Make an external API call to get open data.
* @return {Promise<string>}
*/
Call_API(API參數)
//external API end
使用心得:
利用上面的方法,就可以詢問使用者並得到使用者授權的地理位置。
參考:
https://github.com/actions-on-google/assistant-conversation-nodejs
https://github.com/googleapis/nodejs-dialogflow
https://developers.google.com/assistant/conversational/df-asdk/reference/nodejsv2/overview